home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
wheels1.arc
/
KEYBOARD.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1985-06-28
|
2KB
|
48 lines
{@@@@@@@@@@@ copyright (C) 1984 by Neil J. Rubenking @@@@@@@@@@@@@@@@@@@@@@@@
The purchaser of these procedures and functions may include them in COMPILED
programs freely, but may not sell or give away the source text.
If the function KeyBoard is invoked with the [W]ait parameter, it
WAITS for a key to be pressed. If [N]o wait, it returns zero if
there's nothing in the keyboard buffer, or calls KeyBoard('W') if
there is something. The return is an integer--its low byte is the
ASCII code of the key pressed (zero if a "special" code key) and
its high byte is the scan code. If you call for [N]o wait and no
key was pressed, both high and low bytes will be zero.
Note that the file SCANCODE.DAT contains a screen picture of the
keyboard scan codes and a chart of the special codes.
}
{$I regpack.typ}
{$I keyboard.lib}
var
TheseCodes : integer;
ASCIIcode, ScanCode : byte;
ThisCharacter : char;
begin
WriteLn('Press a key to begin. Press Escape to end.');
repeat
TheseCodes := KeyBoard('W');
ASCIIcode := (TheseCodes shl 8) shr 8;
ScanCode := TheseCodes shr 8;
{ NOTE: I have used "shl" and "shr" here to get the high and low bytes.
These will be familiar to Assembly language programmers. They mean
"shift left" and "shift right". "shl <x>" is a left shift of <x> bits.
The highest bits are "pushed off" the top end, and <x> zeroes are
tacked on the low end. Thus, if a 16-bit integer is shown by
HHHHHHHHLLLLLLLL, (the Hs begin the High 8 bits and the Ls the Low)
after a "shl 8" it will look like "LLLLLLLL00000000", and after being
shifted 8 right again, it will be "00000000LLLLLLLL". If we just
"shr 8" to start with, we get "00000000HHHHHHHH". SHR and SHL are
invaluable any time you need to do individual bit manipulation.}
if ASCIIcode = 0 then
WriteLn('Character is "special"')
else WriteLn('Character is ',chr(ASCIIcode));
WriteLn('Scan Code is ',ScanCode);
WriteLn;
until (ASCIIcode = 27) and (ScanCode = 1);
end.